<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>原型链</title>
	</head>
	<body>
		<!-- 1.原型链
		  访问一个对象的属性时，先在自身属性中查找，找到返回，如果没有，再沿着__proto__这条链向上查找，找到返回，如果最终没找到，返回undefined
		  别名:隐式原型链  作用:查找对象的属性(方法)
		2.构造函数/原型/实体对象的关系
		3.构造函数/原型/实体对象的关系2 -->
		
		<script type="text/javascript">
			// console.log(Object)
			// console.log(Object.prototype)
			console.log(Object.prototype.__proto__)
			function Fn(){
				this.test1 = function(){
					console.log('test()')
				}
			}
			console.log(Fn.prototype)
			Fn.prototype.test2 = function(){
				console.log('test2()')
			}
			
			var fn = new Fun()
			fn.test1()
			fn.test2()
			console.log(fn.toString())
			console.log(fn.test3)
			// fn.test3()
			
			// 1.函数的显示原型指向的对象默认是空Object实例对象(但Object不满足)
			console.log(Fn.prototype instanceof Object)//true
			console.log(Object.prototype instanceof Object)//false
			console.log(Function.prototype instanceof Object)//true
			
			// 2.所有函数都是Function的实例(包括Function)
			console.log(Function.__proto__===Function.prototype)//true
			
			// 3.Object的原型对象是原型链的尽头
			console.log(Object.prototype.__proto__)//null
			
		</script>
	</body>
</html>
